package packageBusiness;

import java.util.ArrayList;
import packageDataAccess.SyllabusSyllathequeData;
import packageException.*;
import packageModel.Syllabus;

/**
 *
 * @author Lionel & Julien
 */
public class ProduitManager {
    
    /**
     * Renvoie les détails d'un syllabus correspondant à l'id passé en argument,
     * dans le but d'afficher un syllabus au hasard afin de le mettre en avant sur la page d'accueil
     * 
     * @param syllabusId
     * @return Syllabus
     * @throws SyllabusException
     * @throws LangueException
     * @throws AuteurException
     * @throws CategorieException
     * @throws InvalideDonneesException
     * @throws DataException  
     */
    public Syllabus SyllabusHasard(int syllabusId) throws 
            SyllabusException, 
            LangueException, 
            AuteurException, 
            CategorieException, 
            InvalideDonneesException,
            DataException {
        if(syllabusId < 0) throw new InvalideDonneesException();
        SyllabusSyllathequeData bd_ss = new SyllabusSyllathequeData();
        return bd_ss.getProduitSylById(syllabusId);
    }
       
    /**
     * Renvoie le nombre de syllabus dans la base de données
     * Utile pour faire le random. 
     * 
     * (En effet, Derby ne comprend pas la fonction RAND et la fonction LIMIT non plus)
     * 
     * @return nbElement
     * @throws SyllabusException
     * @throws LangueException
     * @throws AuteurException
     * @throws CategorieException
     * @throws DataException  
     */
    public int nbSyllabus() throws 
            SyllabusException, 
            LangueException, 
            AuteurException, 
            CategorieException,
            DataException  {
        SyllabusSyllathequeData bd_ss = new SyllabusSyllathequeData();
        return bd_ss.getNbProduit();
    }
    
    /**
     * Renvoie les détails des 6 DERNIERS 
     * (LIMIT n'existe pas, on utilise une méthode de prepStat)
     * les syllabus, dans le but d'afficher les 6 derniers syllabus sur la page d'accueil
     * 
     * @return ArrayList<Syllabus>
     * @throws SyllabusException
     * @throws LangueException
     * @throws AuteurException
     * @throws CategorieException
     * @throws DataException  
     */
    public ArrayList<Syllabus> getSyllabus() throws 
            SyllabusException, 
            LangueException, 
            AuteurException, 
            CategorieException,
            DataException {
        SyllabusSyllathequeData bd_ss = new SyllabusSyllathequeData();
        return bd_ss.getProduitSyl();
    }
    
    /**
     * Renvoie les détails de tous les syllabus,
     * dans le but de les afficher dans le catalogue
     * 
     * @return ArrayList<Syllabus>
     * @throws SyllabusException
     * @throws LangueException
     * @throws AuteurException
     * @throws CategorieException
     * @throws DataException  
     */
    public ArrayList<Syllabus> getAllSyllabus() throws 
            SyllabusException, 
            LangueException, 
            AuteurException, 
            CategorieException,
            DataException {
        SyllabusSyllathequeData bd_ss = new SyllabusSyllathequeData();
        return bd_ss.getAllProduitSyl();
    }
    
    /**
     * Renvoie le syllabus correspondant à l'id passé en paramètre
     * 
     * @param syllabusId
     * @return Syllabus
     * @throws SyllabusException
     * @throws InvalideDonneesException
     * @throws DataException  
     */
    public Syllabus getSyllabusById(int syllabusId) throws 
            SyllabusException, 
            InvalideDonneesException,
            DataException {
        if(syllabusId < 0) throw new InvalideDonneesException();
        SyllabusSyllathequeData bd_ss = new SyllabusSyllathequeData();
        return bd_ss.getSyllabusById(syllabusId);
    }
    
    /**
     * Renvoie TOUS les détails (dont la promotion/réduction) d'un objet syllabus correspondant à 
     * l'id qui est passé en argument afin d'en afficher tous les détails !!!
     * 
     * @param syllabusId
     * @return Syllabus
     * @throws SyllabusException
     * @throws LangueException
     * @throws AuteurException
     * @throws CategorieException
     * @throws PromotionException
     * @throws MotsClefsException
     * @throws InvalideDonneesException
     * @throws ReductionException
     * @throws DataException  
     */
    public Syllabus getOneSyllabus(int syllabusId) throws 
            SyllabusException, 
            LangueException, 
            AuteurException, 
            CategorieException, 
            PromotionException, 
            MotsClefsException, 
            InvalideDonneesException, 
            ReductionException,
            DataException {
        if(syllabusId < 0) throw new InvalideDonneesException();
        SyllabusSyllathequeData bd_ss = new SyllabusSyllathequeData();
        return bd_ss.getProduitDetailSylById(syllabusId);
    }
}
